function myNew(constructor , ...args) {
    // 1. 创建一个简单的js 空对象
    const obj = {};
    // 2. 将空对象的原型指向构造函数的原型
    Object.setPrototypeOf(obj, constructor.prototype)
    // 3. 将这个[空对象]作为this的[上下文执行构造函数] , 即this 指向新创建的空对象
    const result = constructor.apply(obj, args)
    // 4. 如果构造函数返回一个对象 , 则返回该对象 ; 否则返回这个新创建的对象
    return result != null && (typeof result === 'object' || typeof result === 'function') ? result : obj;
    //以上return注意 : typeof null === 'object' , 所以要判断
    //typeof result === 'object' || typeof result === 'function'
    //构造函数可能会出现返回一个函数 , 见readme.md
}

// 5. 测试

//构造函数

function Person(name, age) {
    this.name = name;
    this.age = age;
}


const person = myNew(Person, "ganzhibin", 19);
console.log(person) // { name: 'ganzhibin', age: 19 }
console.log(person instanceof Person) // true